#include <iostream>
#include <string>
#include <memory>
#include<sstream>
#include <json/json.h>

// 序列化
// int main()
// {
//     Json::Value root;
//     root["name"] = "张三";
//     root["sex"] = "男";
//     root["age"] = 18;

//     // json里套json
//     // Json::Value sub;
//     // sub["tel"]="123456";
//     // sub["籍贯"]="XXX";
//     // root["info"]=sub;

//     // 法一：
//     // std::string s1 = root.toStyledString();
//     // std::cout << s1 << std::endl;

//     // 法二：
//     // Json::FastWriter writer; // 去掉换行，网络传送的数据量变小了，效率高
//     // std::string s2 = writer.write(root);
//     // std::cout << s2 << std::endl;

//     // Json::StyledWriter writer; // 用\n给我们进行按行设置了，可读性比较好
//     // std::string s3 = writer.write(root);
//     // std::cout << s3 << std::endl;

//     // 法三（推荐）：它提供了更多的定制选项，如缩进、换行符等
//     Json::StreamWriterBuilder wbuilder; // StreamWriter 的工厂
//     std::unique_ptr<Json::StreamWriter>writer(wbuilder.newStreamWriter());
//     std::stringstream ss;
//     writer->write(root, &ss);
//     std::string s=ss.str();
//     std::cout << s << std::endl;

//     return 0;
// }

// 反序列化
int main()
{
    // JSON 字符串
    std::string json_string = "{\"name\":\"张三\", \"age\":30, \"city\":\"北京\"}";

    // 反序列化，起手式Json::Value;
    Json::Value root;
    Json::Reader reader;

    // 把序列化字符串，反序列化到了Json::Value里面
    bool ok = reader.parse(json_string, root);
    (void)ok;

    // 访问 JSON 数据
    std::string name = root["name"].asString();
    int age = root["age"].asInt();
    std::string city = root["city"].asString();

    // 输出结果
    std::cout << name << std::endl;
    std::cout << age << std::endl;
    std::cout << city << std::endl;

    return 0;
}
